/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.pdx.cs.guavadata.query;

import edu.pdx.cs.guavadata.Channel;
import edu.pdx.cs.guavadata.Transform;
import edu.pdx.cs.guavadata.domain.Domain;
import java.util.List;

/**
 *
 * @author VuTran
 */
public abstract class Operator {
    public boolean isQuery() {
        return true;
    }

    public static final String guavaFlag = "GNode";
    public static final String domainFlag = "GDomain";

    public List<String> exposedColumns;
    public List<Domain> exposedDomains;
    public Operator parent;

    public SqlText visit(Provider qv) {
        return qv.transform(this);
    }

    public void visit(Transform t, Command c) {
        t.expand(this, c);
    }

    public void visit(Channel c, String table) {
        c.mapAliases(this, table);
    }

    public abstract void notifyChange(Operator old, Operator newOp);

    @Override
    public abstract Operator clone();
}
